shell : 遍历文本每一行 | 您所在的位置:网站首页 › shell for循环文件 › shell : 遍历文本每一行 |
【参考文章】:【Shell脚本】逐行处理文本文件 【参考文章】:Shell中的IFS解惑 1. read这种方式处理时,如果在循环内操作全局变量,超过循环作用域后,对全局变量的操作就会失效。 比如把每一行文本添加到一个全局数组,在循环内数组添加的元素是正常的,在循环外数组的元素会恢复到循环之前的状态; cat data.dat | while read line do echo "File:${line}" done这种方式处理时,如果在循环过程中执行某些命令,如 fab 命令,执行完命令后会直接跳出循环 while read line do echo "File:${line}" done < data.dat 2. for var in file 2.1 IFS这种方式处理时,var 取值由IFS(内部域分隔符)决定,默认为 space,tab,newline来拆解读入的变量。 #!/bin/bash IFS_old=$IFS #将原IFS值保存,以便用完后恢复 IFS=$’\n’ #更改IFS值为$’\n’ ,注意,以回车做为分隔符,IFS必须为:$’\n’ do something IFS=$IFS_old #恢复原IFS值 2.2 for var in file这种方式遍历文本不会出现上述问题,推荐使用 for line in $(cat data.dat) do echo "File:${line}" done for line in `cat data.dat` do echo "File:${line}" done 3. awk处理文本时的逻辑比较复杂时一般用上述方式,如果只是简单的截取打印,则可以使用 awk 命令 传送门:Linux awk |
CopyRight 2018-2019 实验室设备网 版权所有 |